/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package pe.edu.pucp.dp1.interfaz.controlador;

import pe.edu.pucp.dp1.interfaz.modelo.Usuario;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import javax.swing.JOptionPane;

/**
 *
 * @author Rossy
 */
public class UsuarioDAO {
   
    Connection connection = null;
    ResultSet result = null;
    private final String url = "jdbc:microsoft:sqlserver://";
    private final String serverName = "192.168.1.51";
    private final String portNumber = "1433";
    private final String databaseName = "SecurityDB";
    private final String userName = "casdeveloper";
    private final String password = "casdeveloper";
    private final String selectMethod = "Direct";

    public ArrayList<Usuario> busqueda(int id, String user, String nombre, String apellidos) {
        ArrayList<Usuario> usuarioList = new ArrayList<Usuario>();
        Usuario usuario;
        usuario = null;
        try {
            connection = this.getConnection();
            if (connection != null) {
                Statement select = connection.createStatement();
                PreparedStatement pstmt = null;
                String query = null;
                //Realiza la busqueda por id
                if (id != 0) {
                    query = "select *from Usuario where id=" + id;
                    pstmt = connection.prepareStatement(query);
                    result = pstmt.executeQuery();
                    while (result.next()) {
                        usuario = new Usuario();
                        usuario.setId(result.getInt("id"));
                        usuario.setUsuario(result.getString("usuario"));
                        usuario.setNombre(result.getString("nombre"));
                        usuario.setApellidos(result.getString("apellidos"));
                        usuario.setCorreo(result.getString("correo"));
                        usuario.setPassword(result.getString("password"));
                        usuarioList.add(usuario);
                    }
                    if (usuario==null){
                       JOptionPane.showMessageDialog(null,"Los datos ingresados no son correctos o no existen", 
                                                     "Mensaje de Error",JOptionPane.ERROR_MESSAGE);   
                    }
                }
                //Realiza la búsqueda por usuario
                else if (user.length()>0){
                    query = "select * from Usuario where usuario='" + user+ "'";
                    pstmt = connection.prepareStatement(query);
                    result = pstmt.executeQuery();
                    while (result.next()) {
                        usuario = new Usuario();
                        usuario.setId(result.getInt("id"));
                        usuario.setUsuario(result.getString("usuario"));
                        usuario.setNombre(result.getString("nombre"));
                        usuario.setApellidos(result.getString("apellidos"));
                        usuario.setCorreo(result.getString("correo"));
                        usuario.setPassword(result.getString("password"));
                        usuarioList.add(usuario);
                    }
                    if (usuario==null){
                       JOptionPane.showMessageDialog(null,"Los datos ingresados no son correctos o no existen", 
                                                     "Mensaje de Error",JOptionPane.ERROR_MESSAGE);   
                    }
                }
                //Realiza la búsqueda por nombres
                else if (nombre.length()>0){
                    query = "select * from Usuario where nombre='" + nombre+ "'";
                    pstmt = connection.prepareStatement(query);
                    result = pstmt.executeQuery();
                    while (result.next()) {
                        usuario = new Usuario();
                        usuario.setId(result.getInt("id"));
                        usuario.setUsuario(result.getString("usuario"));
                        usuario.setNombre(result.getString("nombre"));
                        usuario.setApellidos(result.getString("apellidos"));
                        usuario.setCorreo(result.getString("correo"));
                        usuario.setPassword(result.getString("password"));
                        usuarioList.add(usuario);
                    }
                    if (usuario==null){
                       JOptionPane.showMessageDialog(null,"Los datos ingresados no son correctos o no existen", 
                                                     "Mensaje de Error",JOptionPane.ERROR_MESSAGE);   
                    }
                }
                //Realiza la búsqueda por apellidos                
                else if (apellidos.length()>0){
                    query = "select * from Usuario where apellidos='" + apellidos+ "'";
                    pstmt = connection.prepareStatement(query);
                    result = pstmt.executeQuery();
                    while (result.next()) {
                        usuario = new Usuario();
                        usuario.setId(result.getInt("id"));
                        usuario.setUsuario(result.getString("usuario"));
                        usuario.setNombre(result.getString("nombre"));
                        usuario.setApellidos(result.getString("apellidos"));
                        usuario.setCorreo(result.getString("correo"));
                        usuario.setPassword(result.getString("password"));
                        usuarioList.add(usuario);
                    }
                    if (usuario==null){
                       JOptionPane.showMessageDialog(null,"Los datos ingresados no son correctos o no existen", 
                                                     "Mensaje de Error",JOptionPane.ERROR_MESSAGE);   
                    }
                }
                else {
                    result = select.executeQuery("select * from Usuario;");
                    while (result.next()) {
                        usuario = new Usuario();
                        usuario.setId(Integer.parseInt(result.getString(1)));
                        usuario.setUsuario(result.getString(2));
                        usuario.setNombre(result.getString(3));
                        usuario.setApellidos(result.getString(4));
                        usuario.setCorreo(result.getString(5));
                        usuario.setPassword(result.getString(6));
                        usuarioList.add(usuario);
                    }
                }
                result.close();
                result = null;
                closeConnection();
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return usuarioList;
    }

    public ArrayList<Usuario> queryByID(int id){
        ArrayList<Usuario> usuarioList = new ArrayList<Usuario>();
        Usuario usuario = null;
        try {
            connection = this.getConnection();
            if (connection != null) {
                //Statement select = connection.createStatement();
                PreparedStatement pstmt = null;
                String query = null;
                //Realiza la busqueda por id
                if (id != 0) {
                    query = "select * from Usuario where id=" + id;
                    pstmt = connection.prepareStatement(query);
                    result = pstmt.executeQuery();
                    while (result.next()) {
                        usuario = new Usuario();
                        usuario.setId(result.getInt("id"));
                        usuario.setUsuario(result.getString("usuario"));
                        usuario.setNombre(result.getString("nombre"));
                        usuario.setApellidos(result.getString("apellidos"));
                        usuario.setCorreo(result.getString("correo"));
                        usuario.setPassword(result.getString("password"));
                        usuarioList.add(usuario);
                    }
                }
                
                result.close();
                result = null;
                closeConnection();
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return usuarioList;
    }
    
    public boolean agregarUsuario(int id,String usuario, String nombre,String apellidos,String correo){
        
        int res=0;
        boolean respuesta=false;
        
        try {
            connection = this.getConnection();
            if (connection != null) {
                PreparedStatement pstmt = null;
                String query = null;
                
                //Realiza la busqueda por id
                if (id != 0) {
                    query = "insert into Usuario(id,usuario,nombre,apellidos,correo)"
                            +"values("+id+",'"+usuario+",'"+nombre+"','"+apellidos+"','"+correo+"');";
                    pstmt = connection.prepareStatement(query);
                    res=pstmt.executeUpdate();
                }
                closeConnection();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        if(res==1) respuesta=true;

        return respuesta;
    }

    public boolean modificarUsuario(int id,String user, String nombre,String apellidos,String correo) {
                                                 
        boolean respuesta=false;
        int resp=0;
        try {
            connection = this.getConnection();
            if (connection != null) {
                PreparedStatement pstmt = null;
                String query = null;
                //Realiza la busqueda por id
                if (id != 0) {
                    query = "update Usuario set usuario= '"+user+"' , nombres= '"+nombre+"' ,apellidos= '"+apellidos+ 
                            "' ,correo='"+correo+ "' where id = "+id;
                    pstmt = connection.prepareStatement(query);
                    resp=pstmt.executeUpdate();
                }
                closeConnection();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        if(resp==1) respuesta=true;
      
        return respuesta;
    }

    public void eliminarUsuario(int id) {
       
        int resp=0;
        try {
            connection = this.getConnection();
            if (connection != null) {
                PreparedStatement pstmt = null;
                String query = null;
                //Realiza la busqueda por id
                if (id != 0) {
                    query = "delete from Usuario where id = "+id;
                    pstmt = connection.prepareStatement(query);
                    pstmt.executeUpdate();
                }
                closeConnection();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    public int buscarID(){
        int id=0;
        int fila=0;
        
        try {
            connection = this.getConnection();
            if (connection != null) {
                PreparedStatement pstmt = null;
                String query = null;
                
                    query = "select * from Usuario";
                    pstmt = connection.prepareStatement(query);
                    result = pstmt.executeQuery();
                    while (result.next()) {
                        fila++;    
                    }
                result.close();
                result = null;
                closeConnection();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
         id=fila+1;
        return id;
    }

    private String getConnectionUrl() {
        return url + serverName + ":" + portNumber + ";databaseName="
                + databaseName + ";selectMethod=" + selectMethod + ";";
    }

    private java.sql.Connection getConnection() {
        try {
            Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
            System.out.println("Connection: " + getConnectionUrl());
            connection = java.sql.DriverManager.getConnection(getConnectionUrl(),
                    userName, password);
            if (connection != null) {
                System.out.println("Connection Successful!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return connection;
    }

    private void closeConnection() {
        try {
            if (connection != null) {
                System.out.println("\nClosing connection...");
                connection.close();
            }
            connection = null;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }    
    
}
